"""
宿舍内务pro

宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：
1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分

编写一个Python程序，先读取“内务记录.txt”文件，获取所有已填写的信息（字典格式）。
然后让用户输入自己的名字，名字不存在则提示名字错误然后结束程序，如果名字存在，则循环输入自己完成的宿舍内务任务和完成次数。
每次输入结束后，程序会统计并显示用户总共完成每项任务的次数（包括以前的记录）。
如果任务名称不存在则跳出循环，打印用户的总分，并将本次的任务记录更新到 “内务记录.txt” 文件中，程序结束

编程思路提示：
使用with open来操作文件。
读取文件时，将字符串转换回字典。
写入文件前，将字典转换为字符串。
使用循环来接收用户输入的任务和次数。
使用字典来存储和更新任务次数。
输入为空时结束循环，写入文件。
判断key存不存在字典用 if key in dict: 的方式，或者用异常捕获配合 dict[key] 的方式
任务和分数的对应字典用：
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
"""
import os

# 定义成员名单和任务分数
members = ['member1', 'member2', 'member3']
task_scores = {
    '擦桌子': 1,
    '擦椅子': 1,
    '擦窗户': 1,
    '扫地': 2,
    '拖地': 2,
    '扫厕所': 3,
    '帮全宿舍打饭': 4,
    '帮全宿舍签到': 5
}

# 定义文件路径
file_path = 'data.txt'  # 你可以根据需要更改文件名或路径

def initialize_file(file_path):
    """如果文件不存在，则创建一个空的字典并写入文件"""
    if not os.path.exists(file_path):
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write('{}')

def main():
    initialize_file(file_path)  # 初始化文件

    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            txt = file.read()
            dic = eval(txt)
    except Exception as e:
        print(f"文件读取失败: {e}")
        dic = {}

    while True:
        name = input("请输入你的名字：")
        if name in members:
            break
        else:
            print("名字不存在，程序结束。")
            return

    if name not in dic:
        dic[name] = {}

    while True:
        task = input("完成了什么任务：")
        if not task:
            break
        if task not in task_scores:
            print("任务不存在，请重新输入。")
            continue
        try:
            times = int(input("完成的次数："))
            if times < 0:
                print("次数不能为负数，请重新输入。")
                continue
        except ValueError:
            print("请输入一个有效的整数。")
            continue

        if task in dic[name]:
            dic[name][task] += times
        else:
            dic[name][task] = times

    total_score = sum([task_scores[task] * times for task, times in dic[name].items()])
    print(f"{name}的总分是：{total_score}")

    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(str(dic))
    except Exception as e:
        print(f"文件写入失败: {e}")

if __name__ == '__main__':
    main()